﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Services;
using Common;
using Controladores;
using Entidades;
using Web.Extensions;
using Web.Helpers;
using Web.Helpers.jqGridHelpers;

namespace Web.Pages
{
    public partial class Pagos : BasePage
    {
        protected new void Page_Load(object sender, EventArgs e)
        {
            base.Page_Load(sender, e);

            if (!Page.IsPostBack)
            {
                this.CargarPagina();
            }
        }

        #region Private Methods

        private void CargarPagina()
        {
            var estadosPago = EstadosPago.ObtenerTodos();
            this.selEstadoPago.Bind(estadosPago, "Id", "Texto");

            ObtenerInfoTotales(this.txtCantidadPagos_PendientesDePago, this.txtTotalImporte_PendientesDePago, true, Common.WellKnownKeys.Entities.EstadosPago.PENDIENTE_DE_PAGO.Id);
            ObtenerInfoTotales(this.txtCantidadPagos_Pagados, this.txtTotalImporte_Pagados, true, Common.WellKnownKeys.Entities.EstadosPago.PAGADO.Id);
        }

        private void ObtenerInfoTotales(System.Web.UI.HtmlControls.HtmlInputText txtCantidadPagos, System.Web.UI.HtmlControls.HtmlInputText txtTotalmporte, bool activo, int idEstadoPago)
        {
            var idUsuarioLogueado = WellKnownKeys.Entities.DEFAULT_ID;
            var usuarioLogueado = SessionHelper.GetCurrentUser();
            if (usuarioLogueado == null)
                Helpers.SecurityHelper.RedirectUserToLoginPage();
            else
                idUsuarioLogueado = usuarioLogueado.Id;

            //object idEstadoGuion = DBNull.Value;
            //if (idEstadoPago == Common.WellKnownKeys.Entities.EstadosPago.PENDIENTE_DE_PAGO.Id)
            //{
            //    if (usuarioLogueado.Tipo.Id == Common.WellKnownKeys.Entities.TiposUsuario.ADMINISTRADOR.Id)
            //        idEstadoGuion = Common.WellKnownKeys.Entities.EstadosGuion.FINALIZADO.Id;
            //}
            //if (idEstadoPago == Common.WellKnownKeys.Entities.EstadosPago.PAGADO.Id)
            //    idEstadoGuion = Common.WellKnownKeys.Entities.EstadosGuion.FINALIZADO.Id;

            ;
            var parametros = new Common.Data.ParameterList();
                parametros.AddParameter("activo", activo);
                parametros.AddParameter("id_estado_pago", idEstadoPago);
                parametros.AddParameter("id_estado_guion", DBNull.Value); //idEstadoGuion);
                parametros.AddConditionalParameter("fecha_pago", idEstadoPago == Common.WellKnownKeys.Entities.EstadosPago.PAGADO.Id, DateTime.Now.AddMonths(-3), DBNull.Value);
                parametros.AddConditionalParameter("id_usuario", BasePage.ValidarPermisosAdmin(), DBNull.Value, idUsuarioLogueado);
                parametros.AddParameter("id_proyecto", DBNull.Value);

            var totalesInfo = new StoredProcedure<Entidades.Calculado.TotalRecords>().GetObject(WellKnownKeys.StoredProcedures.Pagos_Totales_Info_GET, parametros.List);
            if (totalesInfo != null)
            {
                txtCantidadPagos.Value  = Common.Formatter.ToInteger(totalesInfo.Count);
                txtTotalmporte.Value    = Common.Formatter.ToCurrency(totalesInfo.Sum);
            }
        }

        #endregion

        #region Web Methods

        [WebMethod]
        public static string obtenerPagosGuiones(int pageSize, int currentPage, string sortColumn, string sortOrder, string search, string searchFilter, string colModel, bool isExport)
        {
            var jSON = string.Empty;
            try
            {
                var ruleActivo      = new jqGridSearchFilterBuilder(searchFilter, colModel).GetMatchingRules("Guion.Proyecto.Activo");
                var ruleEstadoPago  = new jqGridSearchFilterBuilder(searchFilter, colModel).GetMatchingRules("Estado.Id");
                var ruleEstadoGuion = new jqGridSearchFilterBuilder(searchFilter, colModel).GetMatchingRules("Guion.Estado.Id");
                
                var activo          = Common.Formatter.ToBoolean(ruleActivo.First().Data);
                var idEstadoPago    = Convert.ToInt32(ruleEstadoPago.First().Data);
                var idEstadoGuion   = Convert.ToInt32(ruleEstadoGuion.First().Data);

                var idUsuarioLogueado = WellKnownKeys.Entities.DEFAULT_ID;
                var usuarioLogueado = SessionHelper.GetCurrentUser();
                if (usuarioLogueado == null)
                    Helpers.SecurityHelper.RedirectUserToLoginPage();
                else
                    idUsuarioLogueado = usuarioLogueado.Id;

                //var parametros = GridDataHelper.GetParameters(searchFilter, colModel);
                var parametros = new Common.Data.ParameterList();
                    parametros.AddParameter("@activo", activo);
                    parametros.AddParameter("@id_estado_guion", DBNull.Value);
                    parametros.AddParameter("@id_estado_pago", idEstadoPago);
                    parametros.AddParameter("@id_proyecto", DBNull.Value);
                    parametros.AddParameter("@id_guion", DBNull.Value);
                    parametros.AddConditionalParameter("@id_usuario", BasePage.ValidarPermisosAdmin(), DBNull.Value, idUsuarioLogueado);

                var jqGridData = new Grid<Entidades.Calculado.PagoResumen>().GetGridData(WellKnownKeys.StoredProcedures.Pagos_Listado_GET, parametros.List, currentPage, pageSize, BuildDataRows);

                return Formatter.JSON<jqGridData>.Serialize(jqGridData);
            }
            catch (Exception ex)
            {
                LogError(ex);
                throw;
            }
        }

        private static IEnumerable<object[]> BuildDataRows(IList<Entidades.Calculado.PagoResumen> data)
        {
            var lista = from Entidades.Calculado.PagoResumen item in data
                select new object[]
                {
                    item.Id,
                    item.IdPago,
                    item.IdProyecto,
                    BasePage.CrearLink(WellKnownKeys.Grid.Actions.EDITAR + "Facturacion", item.IdProyecto, item.Proyecto),
                    item.IdGuion,
                    item.IdEstadoGuion,
                    BasePage.CrearBoton("GenerarReclamo", String.Format("Guion_{0}", item.EstadoPago.RemoveWhitespaces("_")), item.IdGuion, WellKnownKeys.Images.Icons.RECLAMAR),
                    item.Episodio,
                    BasePage.CrearLink(WellKnownKeys.Grid.Actions.EDITAR + "Guion", item.IdGuion, item.Titulo),
                    BasePage.CrearLink(WellKnownKeys.Grid.Actions.VER + "Proveedor", item.IdProveedor, item.Proveedor),
                    item.IdProveedor,
                    item.ProveedorTipo,
                    Helpers.FacturacionHelper.ObtenerFechaPago(item.IdEstadoPago, item.PagoFecha, item.PagoFechaPago),//item.PagoFecha,
                    item.Loops,
                    item.Canciones,
                    item.ImporteLoops,
                    item.ImporteCanciones,
                    item.ImporteTotal,
                    //item.IdEstadoPago,
                    //item.EstadoPago,
                    //ObtenerFechaPago(item.IdEstadoPago, item.PagoFecha, item.PagoFechaPago),
                    item.MedioPago,
                    item.IdMedioPago,
                };
            return lista;
        }

        #endregion
    }
}